package string;
/** String的演示 */
public class StringDemo {
    public static void main(String[] args) {
        String s = new String("hello");//创建了2个对象
        String s1 = "hello";//复用常量池中的字面量对象
        System.out.println(s==s1);//==比较的是地址是否相同
        //实际应用中String比较相等一般都是比较字符串是否相同
        //因此我们需要使用equals()方法来比较连个字符串内容是否相同
        System.out.println(s.equals(s1));//比较的是内容是否相同








        /*String s1 = "123abc";//堆中创建123abc字符量对象,并缓存到常量池中
        //编译器在编译时,若发现是两个字面量相连,则会直接链接好并将结果保存起来
        //如下语句会被编译成:String s2 = "123abc"
        String s2 = "122"+"abc";
        System.out.println(s1==s2);//true
        String s3 = "123";
        //s3是一个变量,所以在编译器并不会直接编译好
        String s4 = s3+"abc";//创建一个新的对象存储123abc
        System.out.println(s1==s4);//false*/

        /*String s1 = "123abc";//常量池还没有,因此创建该字符串,并存人常量池
        String s2 = "123abc";//常量池中已经有,直接复用
        String s3 = "123abc";//常量池中已经有,直接复用
        //引用类型==,比较的是地址是否相同
        s1 = s1+"!";
        System.out.println(s1==s2);//false
        System.out.println(s2==s3);//true*/
    }
}
